package com.example.demo01.Service;

import com.example.demo01.Entity.Client;
import com.example.demo01.Entity.Tag;
import com.example.demo01.Repository.ClientRepository;
import com.example.demo01.Repository.TagRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class ClientService {

    @Autowired
    private ClientRepository clientRepository;
    @Autowired
    private TagRepository tagRepository;


    @Autowired
    public ClientService(ClientRepository clientRepository, TagRepository tagRepository) {
        this.clientRepository = clientRepository;
        this.tagRepository = tagRepository;
    }
    // 获取所有客户

    public List<Client> getAllClients() {
        return clientRepository.findAll();  // JpaRepository 已经提供了 findAll 方法
    }

    // 创建客户
    public Client saveClient(Client client) {
        return clientRepository.save(client);  // JpaRepository 已经提供了 save 方法
    }

    public Client findById(Long clientId) {
        // 直接使用 JpaRepository 提供的 findById 方法
        return clientRepository.findById(clientId).orElse(null);  // 如果找不到客户端，返回 null
    }

    // 根据 ID 查找客户
    public Optional<Client> getClientById(Long id) {
        return clientRepository.findById(id);  // JpaRepository 已经提供了 findById 方法
    }
    // 获取客户及其所有标签
    public Client getClientWithTags(Long clientId) {
        // 获取客户
        Client client = clientRepository.findById(clientId)
                .orElseThrow(() -> new RuntimeException("Client not found"));

        // 获取该客户的所有标签
        List<Tag> tags = tagRepository.findByClientId(clientId);

        // 将标签添加到客户对象中
        client.setTags(tags);

        return client;  // 返回客户及其标签
    }

    // 更新客户信息
    public Client updateClient(Long id, Client clientDetails) {
        Client client = clientRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("Client not found"));

        client.setName(clientDetails.getName());  // 更新客户的名称
        return clientRepository.save(client);  // 保存更新后的客户
    }

    // 删除客户
    public void deleteClient(Long id) {
        Client client = clientRepository.findById(id)
                .orElseThrow(() -> new RuntimeException("Client not found"));
        clientRepository.delete(client);  // JpaRepository 提供的删除方法
    }


}
